module ctrl_mod(
	rst,

	flush,
	stop,
	stallreq_from_m_i,
	stallreq_from_m1_i,

	s_o,
	c_ins_o,
	c_PC_o,
	c_do_o
);

input rst;

input flush;
input stop;
input stallreq_from_m_i;
input stallreq_from_m1_i;

output reg [2:0] s_o;
output reg c_ins_o;
output reg c_PC_o;
output reg c_do_o;

always @( * ) begin
	if (rst == 1'b1) begin
		// reset
		s_o <= 3'b0;
		c_ins_o <= 1'b0;
		c_PC_o <= 1'b0;
		c_do_o <= 1'b0;
	end else if (flush == 1'b1) begin
		s_o <= 3'b0;
		c_PC_o <= 1'b1;
		c_ins_o <= 1'b1;
		c_do_o <= 1'b1;
	end else if (stop == 1'b1) begin
		s_o <= 3'b111;
		c_PC_o <= 1'b0;
		c_ins_o <= 1'b0;
		c_do_o <= 1'b0;
	end else if (stallreq_from_m1_i == 1'b1) begin
		s_o <= 3'b111;
		c_PC_o <= 1'b0;
		c_ins_o <= 1'b0;
		c_do_o <= 1'b0;
	end else if (stallreq_from_m_i == 1'b1) begin
		s_o <= 3'b011;
		c_PC_o <= 1'b0;
		c_ins_o <= 1'b0;
		c_do_o <= 1'b0;
	end else begin
		s_o <= 3'b0;
		c_PC_o <= 1'b0;
		c_ins_o <= 1'b0;
		c_do_o <= 1'b0;
	end
end

endmodule